package org.footballmanager.pandafootball.system.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.extern.slf4j.Slf4j;
import org.footballmanager.pandafootball.common.constants.Constants;
import org.footballmanager.pandafootball.system.domain.FootBfinfo;
import org.footballmanager.pandafootball.system.domain.FootUser;
import org.footballmanager.pandafootball.system.domain.FootYys;
import org.footballmanager.pandafootball.system.form.impl.FootYysSearchForm;
import org.footballmanager.pandafootball.system.mapper.FootYysMapper;
import org.footballmanager.pandafootball.system.service.FootYysService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import tk.mybatis.mapper.entity.Example;

import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;

@Slf4j
@Service
public class FootYysServiceImpl extends ServiceImpl<FootYys> implements FootYysService {
    @Autowired
    private FootYysMapper footYysMapper;
	
	@Override
	public List<FootYys> getJfb() {
		Example example = new Example(FootYys.class);
		example.orderBy("jf desc, sl desc, iss desc");
		List<FootYys> list = findall(example);
		if(list != null && !list.isEmpty()){
			return list;
		}
		return Collections.emptyList();
	}

	@Override
	@Transactional
	public void setYysData(FootBfinfo bf, boolean issf, HttpServletRequest request) {
		FootYys zhuyys = findYysByUserId(bf.getQd1());
		FootYys keyys = findYysByUserId(bf.getQd2());
		if(issf){
			zhuyys.setBscc(zhuyys.getBscc() + 1);
			keyys.setBscc(keyys.getBscc() + 1);
			
			if(bf.getJq1() == 2){
				zhuyys.setS(zhuyys.getS() + 1);
				zhuyys.setJf(zhuyys.getJf() + 3);
				
				keyys.setF(keyys.getF() + 1);
				keyys.setJf(keyys.getJf());
			}else if(bf.getJq1() == 1){
				zhuyys.setP(zhuyys.getP() + 1);
				zhuyys.setJf(zhuyys.getJf() + 1);
				
				keyys.setP(keyys.getP() + 1);
				keyys.setJf(keyys.getJf() + 1);
			}else{
				zhuyys.setF(zhuyys.getF() + 1);
				zhuyys.setJf(zhuyys.getJf());
				
				keyys.setS(keyys.getS() + 1);
				keyys.setJf(keyys.getJf() + 3);
			}
		}else{
			zhuyys.setBscc(zhuyys.getBscc() - 1);
			keyys.setBscc(keyys.getBscc() - 1);
			if(bf.getJq1() == 2){
				zhuyys.setS(zhuyys.getS() - 1);
				zhuyys.setJf(zhuyys.getJf() - 3);
				keyys.setF(keyys.getF() - 1);
				keyys.setJf(keyys.getJf());
			}else if(bf.getJq1() == 1){
				zhuyys.setP(zhuyys.getP() - 1);
				zhuyys.setJf(zhuyys.getJf() - 1);
				
				keyys.setP(keyys.getP() - 1);
				keyys.setJf(keyys.getJf() - 1);
			}else{
				zhuyys.setF(zhuyys.getF() - 1);
				zhuyys.setJf(zhuyys.getJf());
				
				keyys.setS(keyys.getS() - 1);
				keyys.setJf(keyys.getJf() - 3);
			}
		}
		if(!zhuyys.getBscc().equals(0)){
			Double sl = zhuyys.getS().doubleValue()/zhuyys.getBscc().doubleValue();
			zhuyys.setSl(sl);
		}else{
			zhuyys.setSl(0D);
		}
		if(!keyys.getBscc().equals(0)){
			Double sl2 = keyys.getS().doubleValue()/keyys.getBscc().doubleValue();
			keyys.setSl(sl2);
		}else{
			keyys.setSl(0D);
		}
		this.updateNotNull(zhuyys, request);
		this.updateNotNull(keyys, request);
	}

	@Override
	public List<FootYys> findYysTop10() {
		return footYysMapper.findYysTop10();
	}

	@Override
	public void addCreditByUserId(Long userId, double credit, HttpServletRequest request) {
		FootYys yys = findYysByUserId(userId);
		if(yys != null){
			yys.setXyd(null == yys.getXyd() ? 1 : yys.getXyd() + credit);
			this.updateNotNull(yys, request);
		}
	}

	@Override
	public void saveNewYys(FootUser u, HttpServletRequest request) {
		FootYys yys = new FootYys();
		yys.setUserId(u.getId());
		this.save(yys, request);
	}

	@Override
	public FootYys findYysByUserId(Long userId) {
		Example example = new Example(FootYys.class);
		Example.Criteria criteria = example.createCriteria();
		criteria.andEqualTo(Constants.USERID, userId);
		return this.findByExample(example);
	}

    /**
     * 翻页方法
     *
     * @param footYysSearchForm 条件
     * @return 列表
     */
    @Override
    public List<FootYys> findall(FootYysSearchForm footYysSearchForm) {
        return footYysMapper.findall(footYysSearchForm);
    }

	/**
	 * 根据主键获取记录
	 * @param id 主键
	 * @return 记录
	 */
	@Override
	public FootYys get(Serializable id) {
		return footYysMapper.findById(id);
	}

    /**
     * 查询
     *
     * @param entityname        实体类名
     * @param map               参数
     * @param footYysSearchForm 条件
     */
    @Override
    public void search(String entityname, Model map, FootYysSearchForm footYysSearchForm) {
        map.addAttribute(String.format(Constants.FORMNAME, entityname), footYysSearchForm);
        Page<FootYys> page = PageHelper.startPage(footYysSearchForm.getPageIndex(), footYysSearchForm.getPageSize());
        List<FootYys> list = this.findall(footYysSearchForm);
        map.addAttribute(Constants.PI, page.toPageInfo());
        map.addAttribute(String.format(Constants.LISTENTITY, entityname), list);
    }

    /**
     * 删除所有
     *
     * @param footYysSearchForm 条件
     * @param request           请求
     */
    @Override
    public void deleteAll(FootYysSearchForm footYysSearchForm, HttpServletRequest request) {
        if(footYysSearchForm.getSelectIds() != null){
            String[] result = footYysSearchForm.getSelectIds().split(Constants.COMMA);
            for(String id: result){
                this .delete(Long.parseLong(id), request);
            }
        }
    }
}
